package com.ryskoo.permission.role.service;

import com.ryskoo.framework.core.bean.QueryMessageDTO;
import com.ryskoo.framework.core.service.IBasicService;
import com.ryskoo.permission.role.domain.RolePO;

import java.util.List;

/**
 * 权限服务-角色管理服务接口
 *
 * @author Shawn
 */
public interface IRoleService extends IBasicService<RolePO> {
	/**
	 * 新增或者修改角色信息，并保存或者更新角色与权限的关联关系，返回成功或失败的状态码和信息
	 *
	 * @param role 角色 {@link RolePO}
	 */
	void saveOrUpdateRoleAndMenuAndPermission(RolePO role);

	/**
	 * 删除角色信息以及角色与权限的关联关系，支持批量删除
	 *
	 * @param idList 要删除的角色id列表 {@link List}&lt;{@link String}&gt;
	 */
	void deleteRoleAndPermission(List<String> idList);

	/**
	 * 删除角色信息以及角色与权限的关联关系，支持批量删除
	 *
	 * @param managerId 管理员id {@link String}
	 * @return 管理员拥有的角色列表 {@link List}&lt;{@link RolePO}&gt;
	 */
	List<RolePO> getRoleByManagerId(String managerId);

	/**
	 * 根据管理员用户名查询其关联的角色和权限
	 *
	 * @param userName 管理员姓名
	 * @return 管理员拥有的角色列表 {@link List}&lt;{@link RolePO}&gt;
	 */
	List<RolePO> getRolesByManagerName(String userName);

	/**
	 * 查询角色列表，包含角色所属权限
	 *
	 * @param qm 统一查询消息 {@link QueryMessageDTO}
	 * @return 角色列表 {@link List}&lt;{@link RolePO}&gt;
	 */
    List<RolePO> getRoleWithPermission(QueryMessageDTO qm);
}
